package com.cs.beneficios.web.action;

//import com.cs.beneficios.business.entity.AtributosDAO;
import com.cs.beneficios.business.entity.RestriccionDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.business.model.Beneficiario_AtributoVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.io.IOException;

import java.sql.SQLException;

import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class GuardarModificacionBOTAction extends Action {
	/**
	 * This is the main action called from the Struts framework.
	 * 
	 * @param mapping
	 *            The ActionMapping used to select this instance.
	 * @param form
	 *            The optional ActionForm bean for this request.
	 * @param request
	 *            The HTTP Request we are processing.
	 * @param response
	 *            The HTTP Response we are processing.
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {

		// ConnectionFactory cf = new
		// ConnectionFactory("beneficios","beneficios");
		ConnectionFactory cf = new ConnectionFactory();
		HttpSession session = request.getSession();
		String strBeneficiario = (String) session.getAttribute("beneficiario");
		String codeBOT = request.getParameter("codeBot");
		SubProgramaDAO subproDAO = new SubProgramaDAO(cf);

		String strCodigoSubpro = null;
		try {
			strCodigoSubpro = subproDAO.getCodeSubBOT(codeBOT);
		} catch (SQLException e) {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSUB - cwsub ********/");
		}

		session.setAttribute("CodigoSubpro", strCodigoSubpro);
		String strCodigoSede = request.getParameter("code");
		session.setAttribute("CodigoSede", strCodigoSede);
		Object obtercero = (Object) request.getParameter("tercero");
		session.setAttribute("Tercero", request.getParameter("tercero"));
		session.setAttribute("CostBenefit", request.getParameter("costbene"));
		session.setAttribute("TipoBenefit", request.getParameter("tipobene"));
		boolean insertar = true;
		boolean stop = true;

		List lAtributo = (List) session.getAttribute("ListaAtributos");
		List lError = new LinkedList();
		List lInsertar = new LinkedList();
		List lAtriNoRestric = new LinkedList();
		List lAtriAlerta = new LinkedList();
		List lInsertTercero = new LinkedList();
		RestriccionDAO objRestDAO;

		int tamanolatri = lAtributo.size();

		String variable = "";
		String tipodato = "";
		int compara1 = 0;
		int compara2 = 0;

		// TODO: validar fecha.
		String strDateBenefit = (String) request.getParameter("date");

		session.setAttribute("DateBenefit", strDateBenefit);

		// Fin del proceso

		for (int j = 0; j < tamanolatri; j++) {
			AtributoVO atri = (AtributoVO) lAtributo.get(j);
			String codigo = atri.getCodatributo();
			String obtenercod = "Atri" + codigo;
			String obligacion = atri.getObligatorio();

			if (obligacion.equals("S")) {
				compara1++;
				String obCodVeri = (String) request.getParameter(obtenercod);
				if (!obCodVeri.equals("")) {
					compara2++;
				} else {
					String NomError = atri.getEtiqueta();
					lError.add(NomError);
				}
			}
		}

		// proceso para validar los campos con las restricciones
		if (compara1 == compara2) {
			if (obtercero != null) {

				for (int i = 0; i < tamanolatri; i++) {
					Beneficiario_AtributoVO objinsettercero = new Beneficiario_AtributoVO();
					AtributoVO atritercero = (AtributoVO) lAtributo.get(i);

					String strCodiAtri = atritercero.getCodatributo();
					String strCodiRest = atritercero.getRestriccion();
					String strTipoAtri = atritercero.getTipoatributo();
					String strNombre = atritercero.getNombre();
					tipodato = atritercero.getTipodato();
					variable = request.getParameter("Atri"
							+ atritercero.getCodatributo());

					if (strTipoAtri.equals("R")) {
						objinsettercero.setVariable(variable);
						objinsettercero.setTipodato(tipodato);
						objinsettercero.setCodigoatributo(strCodiAtri);
						objinsettercero.setCodbeneficiario(strBeneficiario);
						objinsettercero.setTipoatributo(strTipoAtri);
						lInsertar.add(objinsettercero);

					} else {
						objinsettercero.setVariable(variable);
						objinsettercero.setTipodato(tipodato);
						objinsettercero.setCodigoatributo(strCodiAtri);
						objinsettercero.setTipoatributo(strTipoAtri);
						lInsertar.add(objinsettercero);

					}

					objinsettercero.setVariable(variable);
					objinsettercero.setTipodato(tipodato);
					objinsettercero.setCodigoatributo(strCodiAtri);
					objinsettercero.setCodbeneficiario(strBeneficiario);
					objinsettercero.setTipoatributo(strTipoAtri);
					lInsertTercero.add(objinsettercero);
				}
				session.setAttribute("listatercero", lInsertTercero);

			} else {
				for (int i = 0; i < tamanolatri; i++) {
					if (stop) {
						Beneficiario_AtributoVO objBenAtriVO = new Beneficiario_AtributoVO();
						AtributoVO atrirestri = (AtributoVO) lAtributo.get(i);
						String strCodiAtri = atrirestri.getCodatributo();
						String strCodiRest = atrirestri.getRestriccion();
						String strTipoAtri = atrirestri.getTipoatributo();
						String strNombre = atrirestri.getNombre();
						tipodato = atrirestri.getTipodato();

						if (tipodato.equals("F")) {
							String dia = request.getParameter("dia" + i);
							String mes = request.getParameter("mes" + i);
							String ano = request.getParameter("ano" + i);
							variable = dia + "/" + mes + "/" + ano;
						} else {
							variable = request.getParameter("Atri"
									+ atrirestri.getCodatributo());
						}

						if ((Object) strCodiRest != null) {
							try {
								objRestDAO = new RestriccionDAO(cf);
								String ArrRest[] = objRestDAO
										.ValidarRestriccion(strCodiAtri,
												strCodiRest, variable, tipodato);
								cf.closeConnection(objRestDAO.getConn());
								if (ArrRest[0].equals("N")) {
									if (ArrRest[1].equals("true")) {

										session.setAttribute("mensajes", "1");

										if (strTipoAtri.equals("R")) {
											objBenAtriVO.setVariable(variable);
											objBenAtriVO.setTipodato(tipodato);
											objBenAtriVO
													.setCodigoatributo(strCodiAtri);
											objBenAtriVO
													.setCodbeneficiario(strBeneficiario);
											objBenAtriVO
													.setTipoatributo(strTipoAtri);
											lInsertar.add(objBenAtriVO);

										} else {
											objBenAtriVO.setVariable(variable);
											objBenAtriVO.setTipodato(tipodato);
											objBenAtriVO
													.setCodigoatributo(strCodiAtri);
											objBenAtriVO
													.setTipoatributo(strTipoAtri);
											lInsertar.add(objBenAtriVO);

										}
									} else {
										insertar = false;

										session.setAttribute("mensajes", "2");
										atrirestri.setDescrest(ArrRest[2]);
										String ver = atrirestri.getDescrest();
										lAtriNoRestric.add(atrirestri);

									}
								} else {
									if (ArrRest[1].equals("false")) {
										session.setAttribute("mensajes", "3");
										atrirestri.setDescrest(ArrRest[2]);
										lAtriAlerta.add(atrirestri);

									}
									if (strTipoAtri.equals("R")) {
										objBenAtriVO.setVariable(variable);
										objBenAtriVO.setTipodato(tipodato);
										objBenAtriVO
												.setCodigoatributo(strCodiAtri);
										objBenAtriVO
												.setCodbeneficiario(strBeneficiario);
										objBenAtriVO
												.setTipoatributo(strTipoAtri);
										lInsertar.add(objBenAtriVO);
									} else {
										objBenAtriVO.setVariable(variable);
										objBenAtriVO.setTipodato(tipodato);
										objBenAtriVO
												.setCodigoatributo(strCodiAtri);
										objBenAtriVO
												.setTipoatributo(strTipoAtri);
										lInsertar.add(objBenAtriVO);
									}
								}
							} catch (SQLException e) {
								System.err
										.println("[GuardarModificacionBOTAction]ERROR SQLException");
								System.err.println("/******** TDSUB - cwsub");
								e.printStackTrace();
								System.err.println("TDSUB - cwsub ********/");
							}
						} else {
							if (strTipoAtri.equals("R")) {
								objBenAtriVO.setVariable(variable);
								objBenAtriVO.setTipodato(tipodato);
								objBenAtriVO.setCodigoatributo(strCodiAtri);
								objBenAtriVO
										.setCodbeneficiario(strBeneficiario);
								objBenAtriVO.setTipoatributo(strTipoAtri);
								lInsertar.add(objBenAtriVO);
							} else {
								objBenAtriVO.setVariable(variable);
								objBenAtriVO.setTipodato(tipodato);
								objBenAtriVO.setCodigoatributo(strCodiAtri);
								objBenAtriVO.setTipoatributo(strTipoAtri);
								lInsertar.add(objBenAtriVO);
							}
						}
					}
				}
			}

			if (lAtriNoRestric.size() > 0) {
				session.setAttribute("listanorestric", lAtriNoRestric);
			} else {
				session.removeAttribute("listanorestric");
			}

			if (lAtriAlerta.size() > 0) {
				session.setAttribute("listaalerta", lAtriAlerta);
			} else {
				session.removeAttribute("listaalerta");
			}
			session.setAttribute("mensaje", "1");
			session.setAttribute("listainsetar", lInsertar);

		} else {
			int tama = lError.size();
			String strTamaError = String.valueOf(tama);
			if (lAtriNoRestric.size() > 0) {
				session.setAttribute("listanorestric", lAtriNoRestric);
			} else {
				session.removeAttribute("listanorestric");
			}

			if (lAtriAlerta.size() > 0) {
				session.setAttribute("listaalerta", lAtriAlerta);
			} else {
				session.removeAttribute("listaalerta");
			}
			session.setAttribute("ListaErrores", lError);
			session.setAttribute("tamanoError", strTamaError);
			session.setAttribute("mensaje", "2");
		}
		if ((lAtriAlerta.size() > 0) || (lAtriNoRestric.size() > 0)
				|| lError.size() > 0) {
			return mapping.findForward("success");
		} else {
			return mapping.findForward("ver");
		}
	}
}
